#ifndef StepCont_H_
#define StepCont_H_
#include "../../SAMA_Function.h"


typedef struct {
	int Step_Max;					//< 最大步数
	int Step_SetTime[8];
	int Step_LimitT[8];
	
}StepCont_Par_t;



typedef struct {
	int Last_Step_Preset;				//< 上一时刻预置步
	int Last_Bit_Ban;					//< 上一时刻按位禁止步 

	bool Step_Runing;
	bool Step_Stopping;
	bool Step_Changing;
	bool Step_Failing;

	int Init_Count;						//< 初始化标志
	int StepCur_Num;					//< 当前步序号

	bool Last_Step_Res;					//< 上一时刻复位
	bool Last_Step_Start;				//< 上一时刻步序逻辑启动信号
	bool Last_Step_Stop;				//< 上一时刻步序暂停信号
	bool Last_Step_Jump;				//< 上一时刻跳步


	float Step_RunTime[8];	

	float StopCurNum_Out; // 暂停时步序号
	float StopCurRUNTime_Out;//暂停时步序执行时间
}StepCont_Sta_t;

struct StepCont_T
{
	Model_Base_t Base;		//< 模块基本参数结构体
	StepCont_Par_t Par;		//< 模块可调参数结构体
	StepCont_Sta_t Sta;		//< 模块运算中间参数结构体
};


extern StepCont_T* StepCont_t;


bool CALCU_SAMA(StepCont)(Model_Base_t* arg, float dt, bool* DI, bool* DO, float* AI, float* AO);		//< SAMA运算函数
int BC_PARA(StepCont)(Model_Base_t* arg, void** Data);													//< 广播SAMA参数变量函数（无参数需要广播的模块直接将BCPara函数设置为NULL即可）
int BAK_STA(StepCont)(Model_Base_t* arg, void** Data);													//< 备份SAMA运算中间参数
int ANA_STA(StepCont)(Model_Base_t* arg, void** Data);													//< 解析备份的SAMA运算中间参数
int CHANGE_PAR(StepCont)(Model_Base_t* arg, void** Data);												//< 在线修改模块参数函数
void INIT_STAPAR(StepCont)(Model_Base_t* arg);															//< 初始化模块运算中间参数


#endif
